<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:p="http://primefaces.org/ui"
                template="./../../resources/templates/baseTemplate.xhtml">

    <ui:define name="content">
        <f:view id="vRoot">
            <p:fieldset legend="Gerenciar público">
                <h:form id="frmPublicos">
                    <!-- Exibição de mensagens gerais -->
                    <p:growl id="gMessages" sticky="false" globalOnly="true" />

                    <!-- Exibição da lista de públicos -->
                    <p:dataTable id="dtPublicos" 
                                 value="#{publicoBean.lstDataTablePublico}"
                                 paginator="true" rows="5" 
                                 rowsPerPageTemplate="5,10"
                                 paginatorPosition="bottom"
                                 paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                                 var="atual">

                        <f:facet name="header">
                            <p:commandButton id="cbViewNovo" 
                                             value="Novo" type="button" 
                                             styleClass="cbViewNovo" 
                                             onclick="dlgNovo.show();"
                                             update=":dlgNovoPublico"
                                             process="@this">
                                <p:resetInput target=":dlgNovoPublico"/>
                            </p:commandButton>
                        </f:facet>
                        <!-- Colunas de edição e exclusão -->
                        <p:column>
                            <f:facet name="header">
                                <h:outputLabel value="Editar"/>
                            </f:facet>
                            <p:commandButton id="cbViewEditar"  
                                             image="ui-icon-pencil" 
                                             title="Editar"
                                             update=":frmEditar:pEditarPublico"
                                             oncomplete="dlgEditar.show();">
                                <f:setPropertyActionListener value="#{atual}" target="#{publicoBean.publicoSelecionado}" />
                            </p:commandButton>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputLabel value="Excluir"/>
                            </f:facet>
                            <p:commandButton id="cbViewExcluir" onclick="dlgExcluir.show();" 
                                             icon="ui-icon-close" title="Excluir">
                                <f:setPropertyActionListener value="#{atual}" target="#{publicoBean.publicoSelecionado}" />
                            </p:commandButton> 
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                Nome
                            </f:facet>
                            <h:outputLabel id="olViewNomePublico" value="#{atual.nmePublico}"/>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                Tipo de público
                            </f:facet>
                            <h:outputLabel id="olViewTipoPublico" value="#{atual.tdTipoPublico}"/>
                        </p:column>
                    </p:dataTable>
                </h:form>

                <!-- Caixa de diálogo de inclusão -->
                <p:dialog id="dlgNovoPublico" 
                          widgetVar="dlgNovo" 
                          modal="true" 
                          header="Novo público"
                          resizable="false">
                    <h:form id="frmNovo">
                        <p:panel id="pNovoPublico">
                            <p:messages id="mNovoMessages" redisplay="false" />
                            <p:panelGrid columns="2">
                                <p:outputLabel id="olNovoNomePublico" value="Nome:" for="itNovoNomePublico"/>
                                <p:inputText id="itNovoNomePublico" value="#{publicoBean.nome}" required="true"
                                             requiredMessage="Digite o nome do público."/>

                                <p:outputLabel id="olNovoTipoPublico" for="somNovoTipoPublico" value="Tipo de público:"/>
                                <p:selectOneMenu id="somNovoTipoPublico" 
                                                 value="#{publicoBean.tipoPublicoSelecionado}" 
                                                 effect="fade" 
                                                 converter="#{publicoBean.conversor}" 
                                                 required="true" 
                                                 requiredMessage="Selecione um tipo de público."
                                                 > 
                                    <f:selectItem itemLabel="Selecione um item..." itemValue=""/>
                                    <f:selectItems value="#{publicoBean.lstMenuTipoPublico}" var="atual" itemLabel="#{atual.nmeTipoPublico}" itemValue="#{atual}"></f:selectItems>
                                </p:selectOneMenu>
                                <p:commandButton value="Cancelar" immediate="true" onclick="dlgNovo.hide()"/>
                                <p:commandButton id="cbNovoSalvar" value="Salvar" 
                                                 actionListener="#{publicoBean.cadastrarPublico}"
                                                 oncomplete="handleSalvo(xhr, status, args);" 
                                                 update=":frmPublicos:dtPublicos :frmNovo :frmPublicos:gMessages"
                                                 ajax="true"/>
                            </p:panelGrid>
                        </p:panel>
                    </h:form>
                </p:dialog>

                <!-- Caixa de diálogo de exclusão -->
                <p:confirmDialog id="dialogoExcluir" message="Deseja realmente excluir?"
                                 header="Excluir público" severity="alert" 
                                 widgetVar="dlgExcluir">
                    <h:form id="frmExcluir">
                        <p:commandButton id="cbExcluirCancelar" value="Cancelar" onclick="dlgExcluir.hide()" type="button" /> 
                        <p:commandButton id="cbExcluirContinuar" value="Continuar"
                                         update=":frmPublicos:dtPublicos :frmPublicos:gMessages" 
                                         oncomplete="dlgExcluir.hide()"
                                         actionListener="#{publicoBean.excluirPublico}"/>
                    </h:form>
                </p:confirmDialog>
                <!-- Caixa de diálogo de edição -->
                <p:dialog id="dialogoEditar" widgetVar="dlgEditar" header="Editar público"
                          resizable="false" modal="true">
                    <h:form id="frmEditar">
                        <p:panel id="pEditarPublico">
                            <p:messages id="mEditarMessages" redisplay="false" />
                            <p:panelGrid columns="2">
                                <p:outputLabel id="olEditarNomePublico" value="Nome:" for="itEditarNomePublico"/>
                                <p:inputText id="itEditarNomePublico" value="#{publicoBean.publicoSelecionado.nmePublico}" required="true"
                                             requiredMessage="Digite o nome do público."/>

                                <p:outputLabel id="olEditarTipoPublico" for="somEditarTipoPublico" value="Tipo de público:"/>
                                <p:selectOneMenu id="somEditarTipoPublico" 
                                                 value="#{publicoBean.publicoSelecionado.tdTipoPublico}" 
                                                 effect="fade" 
                                                 converter="#{publicoBean.conversor}" 
                                                 required="true"
                                                 requiredMessage="Selecione um tipo de público."
                                                 > 
                                    <f:selectItem itemLabel="Selecione um item..." itemValue=""/>
                                    <f:selectItems value="#{publicoBean.lstMenuTipoPublico}" 
                                                   var="atual" 
                                                   itemLabel="#{atual.nmeTipoPublico}" 
                                                   itemValue="#{atual}"></f:selectItems>
                                </p:selectOneMenu>
                                <p:commandButton value="Cancelar" immediate="true" onclick="dlgEditar.hide()"/>
                                <p:commandButton id="cbEditarSalvar" value="Salvar" 
                                                 actionListener="#{publicoBean.alterarPublico}"
                                                 oncomplete="handleEditar(xhr, status, args);" 
                                                 update=":frmPublicos:dtPublicos :frmEditar :frmPublicos:gMessages"/>
                            </p:panelGrid>
                        </p:panel>
                    </h:form>
                </p:dialog>
            </p:fieldset>
        </f:view>
        <!-- Javascript responsável por fechar a caixa de diálogo ao cadastrar-->
        <script type="text/javascript">
            function handleSalvo(xhr, status, args){
                if(args.salvo){
                    dlgNovo.hide();
                }
            }
            function handleEditar(xhr, status, args){
                if(args.editado){
                    dlgEditar.hide();
                }
            }
        </script>
    </ui:define>
</ui:composition>
